package com.diaohw.platform.framework.db.flex.generator;

import com.mybatisflex.codegen.generator.IGenerator;
import com.mybatisflex.codegen.generator.impl.EntityGenerator;
import com.mybatisflex.codegen.generator.impl.MapperXmlGenerator;
import com.mybatisflex.codegen.generator.impl.TableDefGenerator;
import lombok.Builder;
import lombok.Getter;
import mybatisflex.codegen.factory.*;

@Getter
@Builder
public class GeneratorFactoryBuild {

    /**
     * 作者
     */
    private String author;

    /**
     * 数据库URL
     */
    private String url;
    /**
     * 用户名
     */
    private String username;
    /**
     * 密码
     */
    private String password;
    /**
     * 升成的表
     */
    private String[] tables;

    /**
     * 基类
     */
    private Class<?> baseClass;

    /**
     * 是否启用entity
     */
    @Builder.Default
    private boolean enableEntity = true;
    /**
     * 是否启用TableDef
     */
    @Builder.Default
    private boolean enableTableDef = true;
    /**
     * 是否启用Service
     */
    @Builder.Default
    private boolean enableService = true;
    /**
     * 是否启用Impl
     */
    @Builder.Default
    private boolean enableImpl = true;
    /**
     * 是否启用Controller
     */
    @Builder.Default
    private boolean enableController = true;
    /**
     * 是否启用XML
     */
    @Builder.Default
    private boolean enableXml = false;
    /**
     * 是否启用Mapper
     */
    @Builder.Default
    private boolean enableMapper = true;
    /**
     * Entity 生成器接口。
     */
    @Builder.Default
    private IGenerator entityGenerator = new EntityGenerator();
    /**
     * Service 生成器接口。
     */
    @Builder.Default
    private IGenerator serviceGenerator = new ServiceGenerator();
    /**
     * Impl 生成器接口。
     */
    @Builder.Default
    private IGenerator implGenerator = new ServiceImplGenerator();
    /**
     * Controller 生成器接口。
     */
    @Builder.Default
    private IGenerator controllerGenerator = new ControllerGenerator();
    /**
     * XML 生成器接口。
     */
    @Builder.Default
    private IGenerator xmlGenerator = new MapperXmlGenerator();
    /**
     * Mapper 生成器接口。
     */
    @Builder.Default
    private IGenerator mapperGenerator = new CustomerMapperGenerator();

    @Builder.Default
    private IGenerator tableGenerator = new TableDefGenerator();

    public void generator() {
        GlobalGeneratorFactory.generate(this);
    }

    public static void main(String[] args) {
        GeneratorFactoryBuild.builder()
                .url("jdbc:mysql://127.0.0.1:3306/platform_system")
                .username("root")
                .password("123456")
                .author("D-Hw")
                .tables(new String[]{"SYS_MENU"})
                .baseClass(GeneratorFactoryBuild.class)
                .enableService(false)
                .enableImpl(false)
                .enableMapper(false)
                .build()
                .generator();
   }
}
